package com.yeyks.service;

import com.yeyks.dal.domain.HotelInfo;
import com.yeyks.dto.HotelCreateParam;
import com.yeyks.dto.HotelInfoDTO;
import com.yeyks.dto.HotelCreateParam;

import java.util.Map;

/**
 * @Author fuchangshuai
 * @date 2019/2/23 11:44 AM
 */
public interface HotelService {
    /**
     * 新增酒店(同时需要先增加公司信息，再增加用户，后增加酒店)
     *
     * @param createParam
     * @param id
     * @return
     */
    void createHotel(HotelCreateParam createParam, Integer id);

    /**
     * 用户搜索酒店（2民宿，3三星级，4四星级，5五星级，6商务）
     *
     * @param city      城市名称，例：北京
     * @param checkIn   check-in日期，字符串描述，没有时间部分，例：2018-08-13
     * @param checkOut  check-out日期，字符串描述，没有时间部分，例：2018-08-16
     * @param price     价格（单位：分），默认值（0不限价），例：20000 （200元）
     * @param starLevel 星级：默认全部0，2民宿，3星级，6商务
     * @param keyword   关键字按照酒店名称或者房型
     * @param order     推荐(排序)模式：order 0智能排序（默认是这个），1距离（按照距离升序），2价格（按照价格升序），3价格（按照价格降序）
     * @param pageNum   当前页
     * @param pageSize  页码
     * @param positionX 经度
     * @param positionY 纬度
     * @return
     */
    Map<String, Object> searchHotel(String city, Long checkIn, Long checkOut, Integer price, Integer starLevel, String keyword, Integer order, Integer pageNum, Integer pageSize, Double positionX, Double positionY);

    /**
     * 通过酒店id搜索酒店
     *
     * @param hotelId
     * @return
     */
    HotelInfo selectHotelInfoById(Integer hotelId);

    /**
     * 通过酒店id计算酒店的平均分
     *
     * @param hotelId
     * @return
     */
    Integer updateScore(Integer hotelId);

    /**
     * 通过酒店的id查询酒店的详情
     *
     * @param hotelId
     * @return
     */
    HotelInfoDTO selectHotelRoomDetail(Integer hotelId);

    /**
     * 通过id进行删除（将isDel字段修改为0）
     *
     * @param id
     * @return
     */
    int deleteById(Integer id, Integer isDel);

    /**
     * 通过酒店信息获取酒店联系人的手机号（用于发短信）
     *
     * @param hotelInfo
     * @return
     */
    String getSmsPhoneByHotelInfo(HotelInfo hotelInfo);

    /**
     * 通过酒店信息获取酒店固话，没有使用手机号
     *
     * @param hotelInfo
     * @return
     */
    String getTelByHotelInfo(HotelInfo hotelInfo);

    /**
     * 用户搜索酒店(按照星级搜索)（2民宿，3三星级，4四星级，5五星级，6商务）
     *
     * @param city      城市名称，例：北京
     * @param checkIn   check-in日期，字符串描述，没有时间部分，例：2018-08-13
     * @param checkOut  check-out日期，字符串描述，没有时间部分，例：2018-08-16
     * @param price     价格（单位：分），默认值（0不限价），例：20000 （200元）
     * @param starLevel 星级：默认全部0，2民宿，3星级，6商务
     * @param positionX 经度
     * @param positionY 纬度
     * @return
     */
    Map<String, Object> searchHotelNew(String city, Long checkIn, Long checkOut, Integer price, Integer starLevel, Double positionX, Double positionY);

    /**
     * 用户搜索酒店(按照舒适度搜索)（0查询全部，1舒适 2高档 3豪华 4民宿专区）
     *
     * @param city      城市名称，例：北京
     * @param checkIn   check-in日期，字符串描述，没有时间部分，例：2018-08-13
     * @param checkOut  check-out日期，字符串描述，没有时间部分，例：2018-08-16
     * @param price     价格（单位：分），默认值（0不限价），例：20000 （200元）
     * @param starLevel 星级：默认1舒适 2高档 3豪华 4民宿专区
     * @param positionX 经度
     * @param positionY 纬度
     * @return
     */
    Map<String, Object> searchHotelV2(String city, Long checkIn, Long checkOut, Integer price, Integer starLevel, Double positionX, Double positionY);
}
